package com.chuhe.starry.service;

import com.chuhe.common.domain.dto.TokenUserInfoDto;
import com.chuhe.common.domain.entity.UserInfo;
import com.chuhe.common.domain.query.PaginationResultVO;
import com.chuhe.common.domain.vo.req.AdminLoadUserReq;
import com.chuhe.common.domain.vo.req.LoginReq;
import com.chuhe.common.domain.vo.req.RegisterReq;
import com.chuhe.common.domain.vo.req.SaveUserInfoReq;
import com.chuhe.common.domain.vo.resp.ApiResult;
import com.chuhe.common.domain.vo.resp.GetUserInfoResp;
import com.chuhe.common.domain.vo.resp.LoginResp;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.Map;

/**
 * <p>
 * 用户信息 服务类
 * </p>
 *
 * @author <a href="张楚河">chuhe_z</a>
 * @since 2025-05-08
 */
public interface UserInfoService {
    // 生成验证码
    Map<String,String> makeCheckCode();
    // 注册
    ApiResult<?> register(RegisterReq registerReq);
    // 登录
    LoginResp login(LoginReq loginReq);
    // 获取用户信息
    GetUserInfoResp getUserInfo(TokenUserInfoDto userInfo);
    // 保存用户信息
    void saveUserInfo(HttpServletRequest request, UserInfo userInfo,
                      MultipartFile avatarFile,
                      MultipartFile avatarCover) throws IOException;
    // 修改密码
    void updatePassword(TokenUserInfoDto userInfoDto, String password);
    //查询所有用户
    PaginationResultVO<UserInfo> findListByPage(AdminLoadUserReq req);
    //修改用户在线状态
    void updateUserStatus(Integer status, String userId);
    //强制下线
    void forceOffLine(String userId);
}
